#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QMessageBox>
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    void slotFileNew();
    //信号声明区
signals:
    /*
     * 当某个信号对其客户或所有者发生的内部状态发生改变，
     * 信号被一个对象发射。只有 定义过这个信号的类及其派生类能够发射这个信号。
     * 当一个信号被发射时，与其相关联的槽将被立刻执行，
     * 就象一个正常的函数调用一样。信号-槽机制完全独立于任何GUI事件循环。
     * 只有当所有的槽返回以后发射函数（emit）才返回。
     */

    //声明信号mySignal()
    void mySignal();
    //声明信号mySignal(int)
    void mySignal(int x);
    //声明信号mySignalParam(int,int)
    void mySignalParam(int x,int y);
    //槽声明区
public slots:
    /*槽是普通的C++成员函数，可以被正常调用，它们唯一的特殊性就是很多信号可以与其相关联。
     * 当与其关联的信号被发射时，这个槽就会被调用。槽可以有参数，但槽的参数不能有缺省值。
既然槽是普通的成员函数，因此与其它的函数一样，它们也有存取权限。
槽的存取权限决定了谁能够与其相关联。同普通的C++成员函数一样，
槽函数也分为三种类型，即public slots、private slots和protected slots。
public slots：在这个区内声明的槽意味着任何对象都可将信号与之相连接。
这对于组件编程非常有用，你可以创建彼此互不了解的对象，
将它们的信号与槽进行连接以便信息能够正确的传递。
protected slots：在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。
这适用于那些槽，它们是类实现的一部分，但是其界面接口却面向外部。
private slots：在这个区内声明的槽意味着只有类自己可以将信号与之相连接。
这适用于联系非常紧密的类。
槽也能够声明为虚函数，这也是非常有用的。
    */
    //声明槽函数mySlot()
    void mySlot();
    //声明槽函数mySlot(int)
    void mySlot(int x);
    //声明槽函数mySignalParam (int，int)
    void mySlotParam(int x,int y);

private slots:
    void on_btn_one_clicked();

    void on_btn_two_clicked();

    void on_btn_three_clicked();

    void on_btn_four_clicked();

    void on_close_clicked();

    void on_btn_one_2_clicked();

    void on_btn_two_2_clicked();

    void on_btn_three_2_clicked();

    void on_btn_four_2_clicked();

private:
    Ui::Widget *ui;
    QString input="0";
};

#endif // WIDGET_H
/*信号  补充
 * 如果存在多个槽与某个信号相关联，那么，当这个信号被发射时，
 * 这些槽将会一个接一个地 执行，
 * 但是它们执行的顺序将会是随机的、不确定的，
 * 我们不能人为地指定哪个先执行、哪 个后执行。
 *
 * 从形式上 讲信号的声明与普通的C++函数是一样的，
 * 但是信号却没有函数体定义，另外，信号的返回 类型都是void，
 * 不要指望能从信号返回什么有用信息。
信号由moc自动产生，它们不应该在.cpp文件中实现。
moc 全称是 Meta-Object Compiler，也就是“元对象编译器”  其实就是预处理
只有用到信号signals和槽slots时才会用到MOC,
因为采用信号signals和槽slots是QT的特性,
而C++没有,所以采用了MOC(元对象编译器)把信号signals和槽slots部分编译成C++语言.
用信号signals和槽slots需注意的基本问题是:
1)在类class声明中必须加入Q_OBJECT;
2)在CPP文件中要把信号signals和槽slots联系起来,
即使用connect,例connect( iv, SIGNAL(clicked (QIconViewItem *)), this, SLOT( draw()));
 * */
